//
//  "$Id: MatrixCard.h 91860 2012-12-08 09:18:30Z li_weijun $"
//
//  Copyright (c)1992-2007, ZheJiang Dahua Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//

#ifndef __MATRIX_CARD_API_H__
#define __MATRIX_CARD_API_H__

#include "Types.h"
#include "Matrix.h"

#ifdef __cplusplus
extern "C" {
#endif

/// \defgroup MatrixCardAPI API MatrixCard
/// 矩阵接口
///	\n 调用流程图:
/// \code
///    ==========================
///               |                            
///               |
///        createMatrixCard
///               |
///            addRef
///               |
///            getCaps
///               |
///          setCardInfo
///               |
///        getCardAddress
///               |
///            release
///               |
///    ===========================
/// \endcode
/// @{


/// 矩阵子卡设备特性结构，128字节
typedef struct MatrixCardCaps
{
	MatrixCardType		type : 8;			///< 子卡类型
	MatrixCardInterface	interface : 8;		///< 子卡接口
	MatrixCardDefinition definition : 8;	///< 子卡分辨率
	int					chanels;			///< 子卡通道数
	int 				reserved[30];		///< 保留字节
} MatrixCardCaps;				


/// 矩阵子卡接口
typedef struct MatrixCard
{
	/// 底层私有数据
	void *priv;


	/// 增加接口引用
	int (*addRef)(struct MatrixCard *thiz);


	/// 释放接口
	int (*release)(struct MatrixCard *thiz);


	/// 得到矩阵支持的特性。
	/// 
	/// \param [in] thiz 矩阵子卡接口指针
	/// \param [out] caps 指向矩阵特性结构MatrixCaps的指针。
	/// \retval 0  获取成功。
	/// \retval <0  获取失败。
	int (*getCaps)(struct MatrixCard *thiz, MatrixCardCaps * caps);


	/// 向主板通知本子卡的信息
	/// 
	/// \param [in] thiz 矩阵子卡接口指针
	/// \param [in] info 矩阵子卡结构指针。
	int (*setCardInfo)(struct MatrixCard *thiz, MatrixCardInfo *info);


	/// 从主板获取设置给本子卡的配置
	/// 
	/// \param [in] thiz 矩阵子卡接口指针
	/// \param [out] config 矩阵子卡配置结构指针。
	int (*getCardConfig)(struct MatrixCard *thiz, MatrixCardConfig *config);


	///< 保留字节
	int reserved[122];
} MatrixCard;


/// 矩阵接口描述，128字节
typedef struct MatrixCardDesc
{
	int				reserved[32];	///< 保留
} MatrixCardDesc;


/// 创建矩阵接口
///
/// \param [in] desc 矩阵接口描述结构MatrixDesc指针
/// \param [out] Matrix 矩阵接口指针的指针
/// \retval <0 创建失败
/// \retval 0 创建成功
int PAL_API createMatrixCard(MatrixCardDesc *desc, MatrixCard **card);


/// @} end of group

#ifdef __cplusplus
}
#endif

#endif //__MATRIX_CARD_API_H__

